class Solution 
{
public:
    int longestOnes(vector<int>& nums, int k) 
    {
        // 1、初始化
        int n = nums.size();
        int ret = INT_MIN;
        // 2、滑动窗口
        int left = 0, right = 0;
        int length = 0; // 当前子数组中最长连续 1 的长度
        int zero = 0;  // 当前子数组中 0 出现的次数
        while(right < n)
        {
            if(nums[right] != 0) // nums[right] 非 0，此时 right 一定入窗口
            {
                ret = max(ret, ++length);
                ++right;
            }
            else
            {
                if(zero + 1 <= k) 
                {
                    ret = max(ret, ++length);
                    ++zero;
                    ++right;
                }
                else
                {
                    if(nums[left++] == 0)  --zero;
                    --length;
                }
            }
        }
        // 3、返回值
        return ret;
    }
};
/*
- 时间复杂度：O(n)
- 空间复杂度：O(1)
*/
